With the current availability of networking technology, many video games have been designed to allow a number of players to participate in a game from different locations using different machines. Players often will purchase a game, pay to use an online account, connect to a network using a network cable, and compete against other players in a network environment.
Unfortunately, this conventional model has several drawbacks. First, it often is difficult for a group of players to share a common environment and each play their own version of a game competitively against one another. For example, it often is difficult for a group of players to meet in someone's living room and each play their own version of the game against one another. Each machine would need to be provided with its own display, and each player would need a network connection. Alternatively, the players could play on one television using one game machine, but there are limitations on the number of players that can play the game. These conventional limitations occur because the display typically must to be split to show each individual perspective. Additionally, if a single display is used, each player can see the other players' respective viewpoints, thus becoming aware of where those players are going and what those players are doing.
Recently, smaller handheld devices have been provided with wireless networking capabilities, solving the need for each player to have his own display. These devices may allow players to play a game over a local area network, and friends can gather and compete with one another. In the absence of a server, however, one or more of the wireless devices must act as a server, taking on the role of serving required game play information to all of the devices participating in the game. This distribution requirement can burden the devices, which often are designed to play games, rather than to serve requests from other devices.
Even if a server was provided, it often would be handling a plurality of simultaneous download requests from the devices. While a more expensive server might be able to quickly handle these requests more quickly, it nonetheless is desirable to provide an effective solution to this problem where a limited capability server can efficiently handle a plurality of requests without the need for high-priced hardware.
Another possible use of a server would be to provide that server with a plurality of game demonstrations. The server then could be used to respond to a number of game demonstration file requests. However, this arrangement may have the drawback of creating a bottleneck at the server when a large number of file requests are received in a relatively short period of time.
Problems may occur with conventional arrangements because a server typically will receive a number of requests for a game file and process the requests in the order received. This one-at-a-time processing makes the slowdown worse, because all other users must wait while all the requests ahead of them are served. Typically, the requests come at different times, and the server begins processing one request for a file as it is receiving other requests. Any machine later requesting the file has to wait in line until the preceding file requests have been processed by the server.
Thus, it will be appreciated that there is a need in the art to overcome one or more of the above-noted problems. According to one aspect of the exemplary illustrative non-limiting implementations, a download station and/or server is provided whereby a plurality of file requests can be received and processed in an efficient and effective manner. If a plurality of devices are requesting a single file, the server can send packets, or pieces of the file, to each device simultaneously. The devices can then combine these pieces to create the desired file.
Through this method, the server does not have to wait until it is completed processing a single file request before sending the file to a second device. If a device requests a file, the server will begin transmission. If a second device then requests the same file at a later time, the server will continue transmission of the file, and the second device can also receive the same transmission. The later requesting device will receive the packets relating to the presently untransmitted portions of the file, and then can have the previously transmitted portions of the file sent to it when the previous send request is completed. Thus, at the point where the second device moves up to first in a request queue, it has already received a portion of the file, and completing the file request takes a shorter period of time. Additionally, if a third device has then requested the file, the packets sent to complete the file on the second device can also be sent to the third device, and when that device has moved to the front of the request queue, it will then also have a partially completed version of the file in memory.
This method allows a server to process a plurality of requests for a similar file much more quickly than if the server had to send a full copy of the file to each device before it moved on to process the next file request. For example, if five users requested a file, each request coming at a different time, then the four later requesting users would receive all of the packets currently being sent to the first requesting user while the four users were waiting in the queue. Then, when the first user's request was complete, the three remaining later requesting users would also receive the “fill in” packets sent to the second requesting user's device. This method continues until the last user is the first in line, at which point that user's device already has a portion of the file stored therein, allowing completion of the file in a much shorter time. If additional users have subsequently requested the file, they also will receive pieces of the file sent to any users ahead of them in the queue, so the process can continue, potentially perpetually, eliminating the bottleneck associated with multiple file requests.
According to another aspect of the exemplary illustrative non-limiting implementations, a server is provided with a method of tracking file-receipt acknowledgements. This allows the server to know which packets a given device has received. Once the device has moved to the head of the queue, the server can then determine which packets that device needs to complete the file. This prevents the server from having to re-send the entire file each time and relying on the device to fill in the appropriate packets.
According to a further aspect of the exemplary illustrative non-limiting implementations, a client device is provided with a method of tracking received packets. This way, if a device is, for example, fifth in the queue, the device does not redundantly store duplicate information which may be broadcast to it as it moves up in the queue. Because the server is specifically sending out packets based on the needs of the first device in the queue, a device which is fifth will not have its individual packet needs addressed until it is first in the queue. Because more than one device ahead of it may need the same packets from the server, the server would send those packets out based on the needs of the devices ahead of the fifth device as the queue advanced. By tracking the received packets, the device does not attempt to store duplicate versions of the information as it is broadcasted out based on the needs of the preceding devices.
According to another aspect of the exemplary illustrative non-limiting implementations, packets are sent to a plurality of devices simultaneously. Each device will put in its request for a file, and then monitor a broadcast channel for packets pertaining to that file. Whenever a packet is detected, the device checks an internal list of received packets, and if the presently sent packet has not been received and stored, the device stores the packet and flags it as received.
One application for the exemplary illustrative non-limiting embodiments is use in a game demonstration distribution server. A store or other location provided with a plurality of operable game devices can run a server distributing demo versions of games to various devices. This application prevents a user from having to change a cartridge to demo a new game. Accordingly, the server will be able to provide multiple users with new games more quickly, encouraging users to demo and possibly buy multiple games.
While the application of the exemplary illustrative non-limiting embodiments has been discussed in terms of game systems, it will be appreciated that this method could be used in any distribution system where files are distributed from a central server to a plurality of requesting devices.
Certain exemplary illustrative embodiments relate to a method of distributing files from a server to a plurality of client devices in operable communication with the server. The method may comprise, for example, maintaining a queue of requests, with each request being associated with a client device and a client request for a file. One or more needed portions of the file associated with the request first in queue may be identified, with the one or more needed portions of the file corresponding to portions of the file that the client device associated with the request has not yet received. The needed portions of the file may be simultaneously sent for receipt by the client device associated with the request first in queue and for receipt by each client device also having requested the file.
Certain other exemplary illustrative embodiments relate to a system for distributing files. Such systems may comprise a server and a plurality of client devices. The server and the client devices may be in operable communication. Such systems may further comprise a database of files operably connected to the server. The server may be operable to maintain a queue of requests, each request being associated with a client device and a client request for a file; identify one or more needed portions of the file associated with the request first in queue, the one or more needed portions of the file corresponding to portions of the file that the client device associated with the request has not yet received; and simultaneously send the needed portions of the file for receipt by the client device associated with the request first in queue and for receipt by each client device also having requested the file. Each client device may be operable to receive the file portions sent to it by the server.
Yet further exemplary illustrative embodiments relate to a download station comprising a storage location storing a plurality of files for download to client devices and a processor. The processor may be operable to execute the following steps of: receiving requests for files from the client devices; enqueuing the requests in a queue; tracking the files the client devices have requested, portions of the files already downloaded by the client devices, and portions of the files yet to be downloaded by the client devices; and, simultaneously broadcasting at least a portion of the file for receipt by the client devices based in part on the files the client devices have requested, the portions of the files already downloaded by the client devices, and the portions of the files yet to be downloaded by the client devices.
In certain non-limiting implementations, the portions of the file are sent wirelessly, and in certain non-limiting implementations the portions of the file are sent via a single channel. The client devices may be portable game devices, and the files may be games executable by the client devices and/or game-related data interpretable by the client device. The portions of the files may be packets. A completed request may be dequeued based on a checksum of the file associated with the request. A server stripe may be maintained on the server. The server stripe may identify, for each request, downloaded portions of the file associated with the request and not yet downloaded portions of the file associated with the request. A request may be dequeued based on the server stripe. The client devices to which the file will be sent may be determined based at least in part on the server stripe. A client stripe on the client device may be maintained. The client stripe may include portions of the file already received by the client device. Portions of the file may be filtered based on the client stripe, the filtering being performed by the client device.